#ifndef SYSTEMVAL_H
#define SYSTEMVAL_H

#include <QColor>
#include <QMutex>
#include <QScopedPointer>
#include <QQueue>
#include <QMap>
#include <unordered_map>
#include <QDesktopWidget>
#include <QApplication>
#include <QSqlDatabase>
#include <QDebug>
#include <QSqlQuery>
#include <QSqlError>
#include <QMessageBox>





//! 定义输出事件
#define STLOG_LINE std::cout<<__FUNCTION__<<__LINE__
#define QLOG_LINE qDebug()<<__FUNCTION__<<__LINE__

typedef  QMap<QString,QString>  ROW_DATA;     //! 一行数据
typedef  QVector<ROW_DATA>  MULT_ROW;         //! 所在表的数据---多行数据


typedef  QMap<int ,MULT_ROW>  ID_VAL;         //! 一个ID对应的多行

typedef  QMap<QString,ID_VAL> PAR_VAL;      //! 解析器 key-表名

typedef  QMap<QString,MULT_ROW> TableValue;       //! 多张表的数据,key=Frameos,ScanePos
typedef  QMap<int,TableValue> DBValue;      //! 各个表所有ID的数据


typedef  QMap<QString,QStringList> DB_Keys;
typedef  QMap<QString,QMap<QString,QVariant>> DB_Types; //!

class SystemVal
{
public:
    static SystemVal* GetInstance() {
        static QMutex mutex;
        static QScopedPointer<SystemVal> inst;
        if (Q_UNLIKELY(!inst)) {
            mutex.lock();
            if (!inst) {
                inst.reset(new SystemVal);
            }
            mutex.unlock();
        }
        return inst.data();
    }

public:
    QDesktopWidget *desktop;

    QSqlDatabase writes;

    QStringList dbTables ;


    DBValue old_Data;   //! 最原始的
    DBValue cad_Data;  //! 要push的

private:
    SystemVal();


};

#endif // SYSTEMVAL_H
